package inge_soft.gestoriusNuevo.business.controller.implementation;

import java.util.List;

import inge_soft.gestoriusNuevo.business.service.abstraction.IActividadService;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Actividad;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.TipoActividad;

import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.ListModelList;

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class FormularioActividadViewModel {
	
	@WireVariable("actividadService")
	private IActividadService actividadService;
	
	private Actividad actividad;
	private Evento evento;
	private List<String> nombresTipoActividad;
	private String nombreTipoActividad;
	private String modoVentana;
	private Long idActividad;
	private boolean deshabilitado;
	private boolean guardar;
	private boolean cancelar;
	private boolean modificar;
	private boolean volver;
	
	@Init
    public void init() {
		
		modoVentana = (String) Sessions.getCurrent().getAttribute("ModoVentana");
		
		/**
		 * Cargo todas los tipos de actividades
		 */
		List<TipoActividad> tipoAct = actividadService.obtenerTodosTiposActividad();
		nombresTipoActividad = new ListModelList<String>();
		
		for(int i = 0; i < tipoAct.size(); i++){
			nombresTipoActividad.add(tipoAct.get(i).getNombre());
		}
		
		establecerComponentes(modoVentana);
		System.out.println("Modo Ventana: "+ this.getModoVentana());
	}
	
	private void establecerComponentes(String modoVentana){
		if(modoVentana.equals("NUEVO")){
			guardar = false;
			modificar = true;
			cancelar = false;
			volver = true;
			deshabilitado = false;
			
			Long idEvento = (Long) Sessions.getCurrent().getAttribute("IdEvento");
			evento = actividadService.obtenerEvento(idEvento);
			
			actividad = new Actividad();
			TipoActividad tipoAct = new TipoActividad();
			actividad.setTipoActividad(tipoAct);
			actividad.setEvento(evento);
		}

		
		if(modoVentana.equals("EDITAR")){
			guardar = true;
			modificar = false;
			cancelar = false;
			volver = true;
			deshabilitado = false;

			idActividad = (Long) Sessions.getCurrent().getAttribute("IdActividad");
			actividad = actividadService.obtenerActividad(idActividad);
			
			// el elemento de la lista
			nombreTipoActividad = actividad.getTipoActividad().getNombre();
		}
		
		if(modoVentana.equals("VER")){
			guardar = true;
			modificar = true;
			cancelar = true;
			volver = false;
			deshabilitado = true;
			
			idActividad = (Long) Sessions.getCurrent().getAttribute("IdActividad");
			actividad = actividadService.obtenerActividad(idActividad);
			
			// el elemento de la lista
			nombreTipoActividad = actividad.getTipoActividad().getNombre();
		}
	}

	public Actividad getActividad() {
		return actividad;
	}

	public void setActividad(Actividad actividad) {
		this.actividad = actividad;
	}

	public List<String> getNombresTipoActividad() {
		return nombresTipoActividad;
	}

	public boolean isDeshabilitado() {
		return deshabilitado;
	}

	public void setDeshabilitado(boolean deshabilitado) {
		this.deshabilitado = deshabilitado;
	}

	public boolean isGuardar() {
		return guardar;
	}

	public void setGuardar(boolean guardar) {
		this.guardar = guardar;
	}

	public boolean isCancelar() {
		return cancelar;
	}

	public void setCancelar(boolean cancelar) {
		this.cancelar = cancelar;
	}

	public boolean isModificar() {
		return modificar;
	}

	public void setModificar(boolean modificar) {
		this.modificar = modificar;
	}

	public boolean isVolver() {
		return volver;
	}

	public void setVolver(boolean volver) {
		this.volver = volver;
	}
	
	public void setNombreTipoActividad(String nombre){
		nombreTipoActividad = nombre;
	}
	
	public String getNombreTipoActividad(){
		return nombreTipoActividad;
	}
	
	
	
	public String getModoVentana() {
		return modoVentana;
	}

	public void setModoVentana(String modoVentana) {
		this.modoVentana = modoVentana;
	}

	@Command
	public void cambiarTipoActividad() {
		TipoActividad tipoAct = actividadService.obtenerTipoActividad(nombreTipoActividad);
		actividad.setTipoActividad(tipoAct);
	}
	
	@Command
	public void guardar() {
		if(modoVentana.equals("NUEVO")){
		actividadService.crearActividad(actividad.getEvento(), actividad);
		Executions.getCurrent().sendRedirect("index.zul?destino=ListaActividades.zul","");
		System.out.println("GUARDAR");
		}else{
			if(modoVentana.equals("EDITAR")){
				actividadService.modificarActividad(actividad);
				Executions.getCurrent().sendRedirect("index.zul?destino=ListaActividades.zul","");
				System.out.println("MODIFICAR");
			}
				
		}
	}
	
	@Command
	public void cancelar() {
		Executions.getCurrent().sendRedirect("index.zul?destino=ListaActividades.zul","");
		System.out.println("CANCELAR");
	}
	
	@Command
	public void volver() {
		Executions.getCurrent().sendRedirect("index.zul?destino=ListaActividades.zul","");
		System.out.println("VOLVER");
	}
}
